#ifndef SMOKE_MONITOR_H
#define SMOKE_MONITOR_H

#include <stdbool.h>
#include <stdint.h>

// 蜂鸣器GPIO引脚定义
#define BUZZER_GPIO 111

// 烟雾浓度阈值
#define SMOKE_ALARM_THRESHOLD 60

// 烟雾传感器数据结构
typedef struct {
    uint32_t smoke_concentration;  // 烟雾浓度值
    bool alarm_active;            // 警报是否激活
    bool buzzer_enabled;          // 蜂鸣器是否启用
    uint32_t last_update_time;    // 最后更新时间（用于防抖）
} smoke_sensor_data_t;

// 函数声明

/**
 * @brief 初始化烟雾监控系统
 * @return 0 成功，-1 失败
 * @note 初始化蜂鸣器GPIO和相关资源
 */
int smoke_monitor_init(void);

/**
 * @brief 获取当前烟雾浓度值
 * @return 烟雾浓度值
 * @note 这是一个模拟函数，实际项目中应该从传感器读取
 */
uint32_t get_smoke_concentration(void);

/**
 * @brief 更新烟雾浓度值并检查警报
 * @param concentration 新的烟雾浓度值
 * @note 更新全局烟雾浓度值，检查是否需要触发警报
 */
void update_smoke_concentration(uint32_t concentration);

/**
 * @brief 检查是否需要触发警报
 * @param concentration 当前烟雾浓度值
 * @return true 需要警报，false 不需要警报
 */
bool check_smoke_alarm(uint32_t concentration);

/**
 * @brief 控制蜂鸣器状态
 * @param state true 开启蜂鸣器，false 关闭蜂鸣器
 * @return 0 成功，-1 失败
 */
int buzzer_set_state(bool state);

/**
 * @brief 触发烟雾警报
 * @note 启动蜂鸣器并设置警报状态
 */
void trigger_smoke_alarm(void);

/**
 * @brief 停止烟雾警报
 * @note 关闭蜂鸣器并清除警报状态
 */
void stop_smoke_alarm(void);

/**
 * @brief 获取当前烟雾传感器数据
 * @return 当前烟雾传感器数据的拷贝
 */
smoke_sensor_data_t get_smoke_sensor_data(void);

/**
 * @brief 烟雾监控定时任务
 * @note 定期检查烟雾浓度并更新状态，用于定时器回调
 */
void smoke_monitor_task(void);

/**
 * @brief 清理烟雾监控资源
 * @note 在程序退出时调用
 */
void smoke_monitor_cleanup(void);

/**
 * @brief 设置蜂鸣器启用状态
 * @param enabled true 启用蜂鸣器，false 禁用蜂鸣器
 * @note 允许用户手动禁用蜂鸣器
 */
void set_buzzer_enabled(bool enabled);

/**
 * @brief 手动停止当前警报
 * @note 提供用户手动停止警报的功能
 */
void manual_stop_alarm(void);

#endif /* SMOKE_MONITOR_H */
